package com.qfmy.mapper.novel;

import model.entity.novel.Novel;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * @author 清风明月
 * @Package com.qfmy.mapper.novel
 * @date 2025/6/6
 * @description 小说
 */
@Mapper
@SuppressWarnings("all")
public interface NovelMapper {

    /**
     * 获取热门小说
     * @return
     */
    List<Novel> getHotNovels();

    /**
     * 根据分类获取热门小说
     * @param name
     * @return
     */
    List<Novel> getHotNovelsByType(String name);

    /**
     * 获取排行榜小说
     * @return
     */
    List<Novel> getRankNovels();

    /**
     * 获取免费小说
     * @return
     */
    List<Novel> getFreeNovels();

    /**
     * 获取用户喜欢的小说
     * @param userPreferredType
     * @param excludedIds
     * @param start
     * @param size
     * @return
     */
    List<Novel> findNovelsByType(String userPreferredType, List<Long> excludedIds, Integer start, Integer size);

    /**
     * 根据id获取小说
     * @param userViewHistory
     * @return
     */
    List<Novel> findAllById(List<Long> userViewHistory);

    /**
     * 获取补充数据
     * @param popularFeatures
     * @param excludedIds
     * @param start
     * @param size
     * @return
     */
    List<Novel> findByFeatures(List<String> popularFeatures, List<Long> excludedIds, int start, int size);

    /**
     * 获取最新小说
     * @return
     */
    List<Novel> getNewestNovels();

    /**
     * 获取排行榜小说
     * @param pageNum
     * @param size
     * @return
     */
    List<Novel> getRankNovelsByPage(Integer start, Integer size);

    /**
     * 获取完结小说
     * @param start
     * @param size
     * @return
     */
    List<Novel> getCompleteNovels(Integer start, Integer size);

    /**
     * 获取最新小说
     * @param start
     * @param size
     * @return
     */
    List<Novel> getNewNovel(Integer start, Integer size);

    /**
     * 获取分类小说
     * @param type
     * @param start
     * @param size
     * @return
     */
    List<Novel> getNovelByTypePage(String type, Integer start, Integer size);

    /**
     * 获取最高人气小说
     * @param type
     * @param start
     * @param size
     * @return
     */
    List<Novel> getNovelsByTypeRank(String type, Integer start, Integer size);

    /**
     * 根据评分获取小说
     * @param type
     * @param start
     * @param size
     * @return
     */
    List<Novel> getNovelsByTypeAndScore(String type, Integer start, Integer size);

    /**
     *
     * @param type
     * @param start
     * @param size
     * @return
     */
    List<Novel> getNovelsByTypeAndUpdateTime(String type, Integer start, Integer size);

    /**
     * 获取最新排行
     * @return
     */
    List<Novel> getNewRankNovels();

    /**
     * 获取潜力新书
     * @return
     */
    List<Novel> getPotentialNewBook();

    /**
     * 获取新书上架
     * @return
     */
    List<Novel> getNewBookReleases();

    /**
     *获取所有的小说
     * @return
     */
    List<Novel> getAllNovel();

    /**
     *
     * @param start
     * @param size
     * @return
     */
    List<Novel> getHotSearch(Integer start, Integer size);

    /**
     * 查询搜索数据
     * @param pageNum
     * @param size
     * @return
     */
    List<Novel> getHotSearchNovel(Integer start, Integer size);

    /**
     * 更新搜索数据
     * @param novelId
     */
    @Update("update novel set search_count = search_count + 1 where novel_id = #{novelId}")
    void updateSearch(Long novelId);

    /**
     * 更新阅读数据
     * @param novelId
     */
    @Update("update novel set view_count = view_count + 1 where novel_id = #{novelId}")
    void updateViewCount(Long novelId);

    /**
     * 获取小说信息
     *
     * @param novelId
     * @param userId
     * @return
     */
    Novel getNovelById(Long novelId, Long userId);

    /**
     * 更新小说信息
     * @param novel
     */
    void upDateNovel(Novel novel);

    /**
     * 获取小说信息
     * @param novelId
     * @return
     */
    Novel getNovelByNovelId(Long novelId);
}
